记一次达梦数据库虚拟表SQL优化记录分享 |
您所在的位置:网站首页 › 达梦数据库 group by › 记一次达梦数据库虚拟表SQL优化记录分享 |
前言: 遇到问题不要怕,先看一看。 语句看懂了,创建个索引,优化个处理方式,30S变0.3秒,速度提升90倍。 背景: 达梦数据库、督办定制功能的一个查询列表慢(虚拟表)。 语句:select id as dbrw,hzrwnr,createdate,BB,whbh01,whbh02,whbh03,zkh,ykh,sfyrq,qtkckry, ( select count (wfrb.requestid) from workflow_requestbase wfrb left join formtable_main_279 mt on wfrb.requestid=mt.requestid where mt.dbrw=govern_task.id and currentnodeid=1831 ) as dshsl, case ( select count (wfrb.requestid) from workflow_requestbase wfrb left join formtable_main_279 mt on wfrb.requestid=mt.requestid where mt.dbrw=govern_task.id and currentnodeid=1831 ) when 0 then 0 else 1 end as dshzt, jsjbh,id,name,remark,sponsordept,responsible,coordinatordept,sponsor,coordinator,dycfksx,status,cjrbm,HZfgld,HZlxrq,HZwcsx,HZbz,HZxgfj,jgfkpl,CATEGORYID, (select max(ldzt) from uf_dbfk where taskid=govern_task.id) as ldzt, (select min(issign) from govern_operator where taskid=govern_task.id) as sfyqs, status as zt1,(select fkksrq from (select UD.taskid,max(UDT1.fkksrq) as fkksrq from uf_dbfk UD,uf_dbfk_dt1 UDT1 where UD.id = UDT1.mainid group by UD.taskid) where taskid=govern_task.id) as fkksrq ,(select xcfkrq from (select UD.taskid,max(UDT1.jhldrqhuang) as xcfkrq from uf_dbfk UD,uf_dbfk_dt1 UDT1 where UD.id = UDT1.mainid group by UD.taskid) where taskid=govern_task.id) as xcfkrq,aenddate,aendtime from govern_task where tasktype=0 and status !=4 问题: 语句执行需要30S,导致前端查询特别慢。 解读:查询 字段。。。。。。。 子查询1大概是待办数量 子查询2大概是待办状态 子查询3取了啥最大值 子查询4取了啥最小值 子查询5fk反馈日期 子查询6xc反馈日期 查询督办任务。 测试:子查询语句单独执行测试,都挺快的。
主查询测试,也很快。 mt.dbrw=govern_task.id 这一步代价大,分析可能原因1:dbrw是自定义字段,不是索引字段。 2.子查询重复执行。
优化思路二:增加索引创建索引 表:formtable_main_279 字段:dbrw 语法:create index 索引名 on 表名(sourceid,rightid); 命名:idx_表名_联合索引名字 创建:CREATE INDEX IDX_formtable_main_279_dbrw ON formtable_main_279(dbrw) 优化思路一:尝试优化语句解读语句:
select count (wfrb.requestid) from workflow_requestbase wfrb left join formtable_main_279 mt on wfrb.requestid=mt.requestid where currentnodeid=1831 and mt.dbrw=govern_task.id
查找流程表单:formtable_main_279,对应任务ID,当前节点为1831 的流程数量。 优化语句: 流程表单增加状态字段,做节点前后的赋值,去掉大表拼接。 select count (mt.requestid) from formtable_main_279 mt where mt.lczt=1 and mt.dbrw=govern_task.id
历史数据赋值更新: 先查询后更新 再验证
优化后数据结果与原语句查询结果导出对比测试一致。
总结: 经过排查定位、创建索引、优化语句。 Select 查询语句由 30.19秒 提升为0.33秒,速度提升了90倍
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |